package com.personal.toword;

import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.util.List;
import java.util.Map;

import com.personal.db.DBMysql;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.TextAlignment;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;

public class ToWord {

    public static void main(String[] args) throws Exception{
        String tableNames= "keta_user 后台用户表,texternaluser交汇号申请表,tmember会员表,tmemberinfo会员消息表,tmemberlevel会员等级表,tmemberqa会员消息表,tmemberscore会员积分表,tmembersetting会员一览功能	,tpayment打赏记者交子表	,tpertime绩效评分表	,keta_permission权限表	,keta_role角色表	,keta_role_permission角色权限表	,keta_user_role用户角色关系表	,keta_organization组织表	,keta_organization_role组织角色表	,keta_module功能表	,Tcolumn栏目表	,Tcolumnlog栏目操作日志表	,tcolumntype交汇号栏目分类	,tcolumnreltype交汇号栏目分类和栏目关系表	,Tarticle文章表	,Tarticleattachment文章附件表	,Tarticlebackups稿件备份表	,tarticlecklevel稿件扩展数据参考等级表	,tarticleext图文混排拓展字段实体类表	,tarticleextapp图文混排拓展字段实体类	,Tarticleextnum文章运营数据表	,Tarticlelist文章列表表	,Tarticlelisttemplate模板实体类表	,Tarticlerel相关稿件表	,tdomflowrecords稿件日志表	,Tactivitybase活动基本信息表	,tactivityclassify	,Tactivitycrowdgroupset	,Tactivityjiaoprizeset奖品配置表	,tactivityjiaoset	,Tactivitypartake活动参与人信息表	,tactivitypartake_userinfo活动参与人补充信息表	,tactivitypartake_userinfo_last活动参与人最后一次补充的信息表	,tactivityrecommend活动推荐表	,tactivityshare活动分享表	,tactivitysponsor      活动主办方表	,tactivitysponsorattention	,tactivitytag  活动标签表	,tactivityvotedetailpicset  活动投票明细图片设置表	,tactivityvotedetailset  活动投票明细设置表	,tactivityvoteset    活动投票设置表	,tadannex    广告内容附件信息	,tadinfo       广告信息	,tadinfoposition    广告版位关联表	,tadposition        广告版位信息	,tadstatistics    广告利用信息	,Tmallgoods商品信息表	,tmallgoodsbusiness商品商家表	,tmallgoodsclassify商品分类表	,tmallgoodscypher商品卡密表	,tmallgoodslabel商品标签表	,tmallgoodsregionset商品区域表	,tmallpic商品图片表	,tmallvipgoods	,Tmallvipinfo	,Tmallvipmemberlevel	,Torder订单表	,Torderentry订单商品信息表	,Torderpay订单付款信息表	,Tpayinterface支付接口表	,tleader领导人表	,tleadersofregion领导人地区关系表	,Tnislive直播信息表	,Tnisattachment直播附件表	,Ttopiccategory问吧话题类别表	,Ttopic问吧话题表	,Ttopicquestion问吧问题表	,Ttopicanswer问题回答表	,ttopicquestionattention	,Tpicture资源图片管理表	,Tpicturelog资源图片日志表	,Tvideo资源视频信息表	,Tvideolog资源视频日志表	,Tdateextnum小程序统计表	,keta_dictionary数据字典表	,keta_log_info系统日志表	,t_push_message推送消息表	,tacserviceconfig服务配置表	,tacuiconfig    客户端APP启动画面配置表	,tacwebconfig客户端站点配置表	,tcategoryother分组表	,texternalapplication外部应用信息表	,textfield下拉框选项字典表	,tpushmessage推送app消息表	,tpushtask推送app消息任务表	,treadhistory用户查看文章日志表	,tregion城市区域表	,tschedule文章定时发布表	,tscorerule积分规则表	,tseckill秒杀商品信息表	,tsiteadpicmanage轮播图片信息表	,tstatisticsset统计分析设置表	,tsystemlist  系统信息配置表	,tsystemmoduleconfig客户端模块管理表	,tthirdapplicationaccount 第三方应用申请信息表	,tweather天气表";
        List tablesInfoList = new DBMysql().getTablesInfo(tableNames);
        new ToWord().toWord(tablesInfoList);
    }

    public void toWord(List tablesInfoList) throws Exception{
        XWPFDocument xdoc = new XWPFDocument();
        //标题
        XWPFParagraph titleMes = xdoc.createParagraph();
        titleMes.setAlignment(ParagraphAlignment.CENTER);
        XWPFRun r1 = titleMes.createRun();
        r1.setBold(true);
        r1.setFontFamily("微软雅黑");
        r1.setText("XXX的计划及进度报告");//活动名称
        r1.setFontSize(20);
        r1.setColor("333333");
        r1.setBold(true);
        for(int i=0;i<tablesInfoList.size();i++) {
            List tableInfo = (List)tablesInfoList.get(i);

            String tableName = tableInfo.get(0)+"";

            setEmptyRow(xdoc,r1);

            //1及标题
            XWPFParagraph para1 = xdoc.createParagraph();
            //1级大纲
            para1.setStyle("1");
            XWPFRun run1 = para1.createRun();
            run1.setText(tableName);
            //表格
            setEmptyRow(xdoc,r1);
            XWPFTable xTable = xdoc.createTable(tableInfo.size(),5);
            createSimpleTable(xTable, xdoc,tableInfo);
        }

        // 在服务器端生成
        FileOutputStream fos = new FileOutputStream( "f:\\tmp\\test.docx");
        xdoc.write(fos);
        fos.close();
    }

    public static void createSimpleTable(XWPFTable xTable, XWPFDocument xdoc,List tableInfo)
            throws IOException {
        String bgColor="FFFFFF";
        CTTbl ttbl = xTable.getCTTbl();
        CTTblPr tblPr = ttbl.getTblPr() == null ? ttbl.addNewTblPr() : ttbl.getTblPr();
        CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr.addNewTblW();
        tblWidth.setW(new BigInteger("8600"));
        tblWidth.setType(STTblWidth.DXA);
        int rows = xTable.getRows().size();
        //标题行
        setCellText(xdoc, getCellHight(xTable, 0, 0),"列名",bgColor,1000);
        setCellText(xdoc,getCellHight(xTable, 0, 1),"数据类型",bgColor,500);
        setCellText(xdoc,getCellHight(xTable, 0, 2),"允许空",bgColor,500);
        setCellText(xdoc,getCellHight(xTable, 0, 3),"默认值",bgColor,500);
        setCellText(xdoc,getCellHight(xTable, 0, 4),"说明",bgColor,6000);
        for (int i = 1; i < rows; i++) {
            Map rowInfo = (Map)tableInfo.get(i);
            String fieldName = rowInfo.get("fieldName")+"";
            String fieldType = rowInfo.get("fieldType")+"";
            String fieldNull = rowInfo.get("fieldNull")+"";
            String fieldDefault = rowInfo.get("fieldDefault")+"";
            String fieldComment = rowInfo.get("fieldComment")+"";

            setCellText(xdoc, getCellHight(xTable, i, 0),fieldName,bgColor,1000);
            setCellText(xdoc,getCellHight(xTable, i, 1),fieldType,bgColor,500);
            setCellText(xdoc,getCellHight(xTable, i, 2),fieldNull,bgColor,500);
            setCellText(xdoc,getCellHight(xTable, i, 3),fieldDefault,bgColor,500);
            setCellText(xdoc,getCellHight(xTable, i, 4),fieldComment,bgColor,5000);
        }
    }

    //设置表格高度
    private static XWPFTableCell getCellHight(XWPFTable xTable,int rowNomber,int cellNumber){
        XWPFTableRow row = null;
        row = xTable.getRow(rowNomber);
        row.setHeight(100);
        XWPFTableCell cell = null;
        cell = row.getCell(cellNumber);
        return cell;
    }
    private static void setCellText(XWPFDocument xDocument, XWPFTableCell cell,
                                    String text, String bgcolor, int width) {
        CTTc cttc = cell.getCTTc();
        CTTcPr cellPr = cttc.addNewTcPr();
        cellPr.addNewTcW().setW(BigInteger.valueOf(width));
        XWPFParagraph pIO =cell.addParagraph();
        cell.removeParagraph(0);
        XWPFRun rIO = pIO.createRun();
        rIO.setFontFamily("微软雅黑");
        rIO.setColor("000000");
        rIO.setFontSize(12);
        rIO.setText(text);
    }

    //设置表格间的空行
    public static void setEmptyRow(XWPFDocument xdoc,XWPFRun r1){
        XWPFParagraph p1 = xdoc.createParagraph();
        p1.setAlignment(ParagraphAlignment.CENTER);
        p1.setVerticalAlignment(TextAlignment.CENTER);
        r1 = p1.createRun();
    }
}
